In the realm of electronic communications where there is at least some degree of assumed unreliability, many communications systems have a mechanism for determining if a specific communications was successfully received or if the communications failed in some manner or both.
Take TCP for example. It is short for Transmission Control Protocol. It is one of the main protocols in TCP/IP networks. Whereas the IP protocol deals only with packets, TCP enables two hosts to establish a connection and exchange streams of data.
In general, TCP guarantees delivery of data and also guarantees that data will be delivered in the same order in which it was sent. To do that, TCP employs an acknowledgement-based retry procedure to detect and retry failed communications.
In TCP, a host sends a group (i.e., window) of data packets to a receiver on a communications network. The group may be called a “window.” A TCP window is the amount of outstanding (i.e., unacknowledged by the recipient) data a sender is allowed to send on a particular connection before it gets an ACK back from the receiver that the receiver has gotten some of it.
ACK is short for acknowledgement code. It typically is a transmission control indicator indicating that a transmitted message was received uncorrupted or without errors or that the receiving station is ready to accept more transmissions. The receiver sends the code to the sender to indicate that the transmission has been accepted.
After the host sends the window of packets, it waits for an ACK from that receiver indicating that all or some packets of the window were successfully received. If it fails to receive an ACK within a defined retry time period, the host resends all of the packets of the window. So, if the sender does not receive an ACK, it assumes that the receiver did not receive any of the data since the last time the sender got an ACK from the receiver.
The ACK received by the host may indicate the last contiguous packet of a window that was successfully received. If so, the host resends all of the packets in the window following that packet specified by the ACK as being successfully received.
Conventional Retry Approaches
Conventional retry approaches typically resend large groups of data—maybe even an entire window worth of packets—when a communications failure is detected. Also, these conventional approaches are typically ACK-based. Furthermore, these conventional approaches typically do not account for any time-critical nature of the reception of data. An example of such a conventional approach is the TCP retry approach discussed above.
Those of ordinary art in the field are generally familiar with conventional retry approaches and specifically with TCP's retry approach.